// 路由前置守卫
// 进行登录拦截的控制
import router from './router'
import store from '@/store'
import NProgress from 'nprogress'// 引入一份进度条插件
import 'nprogress/nprogress.css'// 引入进度条样式
// 转圈圈样式去除
NProgress.configure({ showSpinner: false })
// 白名单
const whiteList = ['/login', '/404']
// 路由前置守卫
router.beforeEach(async(to, from, next) => {
  NProgress.start()
  const token = store.getters.token
  // 判断有没有token
  if (token) {
    // 已经登录
    if (to.path === '/login') {
      next('/')
      NProgress.done()
    } else {
      // 不是登录页
      // 处理我们获取用户资料的逻辑，发送请求
      if (!store.state.user.userInfo.userId) {
        const { roles } = await store.dispatch('user/getUserInfo')
        // console.log('将来处理权限控制', res)
        // 拿到权限信息，应该根据权限信息，从动态路由模块中筛选出来
        // 需要追加的路由
        // 追加到routers规则中addRoutes
        // 调用action同步到vuex中
        const otherRoutes = await store.dispatch('permission/filterRoutes', roles.menus)
        router.addRoutes([...otherRoutes, { path: '*', redirect: '/404', hidden: true }])
        // next（{}）的目的是保证路由添加完成了在进入页面
        // (可以理解为重进一次)
        next({
          ...to,
          replace: true// 重进一次, 不保留重复历史
        })
      }
      next()
    }
  } else {
    if (whiteList.includes(to.path)) {
      next()
    } else {
      next('/login')
      NProgress.done()
    }
  }
})
// 后置导航守卫
router.afterEach((to, from) => {
  document.title = to?.meta?.title || '人资后台管理系统'
  NProgress.done()
})
